import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Monstruo here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Monster extends Personaje
{
    private Grass grass;
    private Wall2 wall;
    private int band;
    private int randomNumber;
    // private Bala bala;

    public Monster(Grass target,int rest)
    {
        super(rest);
        grass=target;
        band=0;
        World world=getWorld();
       
        randomNumber=Greenfoot.getRandomNumber(3);
    }

    public void act() 
    {

        attack();
        // attackGrass();   
        // detectWalls();
        //detectOutWalls();
        detectOutsideWalls();
        //     destroy();   
        //     detectHero();
        //  detectObj();

        // attackHeroe();

    }

    public void destroyHero()
    {
        Heroe hero=(Heroe)getOneIntersectingObject(Heroe.class);

        if(hero!=null)
        {
            hero.decreaseResistance();
            move(-20);
        }

    }

    /*  public void detectObj()
    {
    Activador obj=(Activador)getOneIntersectingObject(Activador.class);

    if(obj!=null)
    {
    obj.decreaseResistance();
    move(-10);
    }

    }*/

    public void destroyActivador()
    {
        Activador act=(Activador)getOneIntersectingObject(Activador.class);

        if(act!=null)
        {
            act.decreaseResistance();
            move(-10);
        }

    }

    public void destroyPuerta()
    {
        Puerta puerta=(Puerta)getOneIntersectingObject(Puerta.class);

        if(puerta!=null)
        {
            puerta.decreaseResistance();
            move(-10);
        }

    }

    public void detectOutWalls()
    {
     //   Wall wall=(Wall)getOneIntersectingObject(Wall.class);
        Wall2 wall2=(Wall2)getOneIntersectingObject(Wall2.class);
        if(wall2!=null)
        {
             if(getY()<293&&getY()>206&&getX()>561)
           {
               setLocation(getX(),getY()-5);
               turn(-45);
               move(1);
            }
            if(getX()<561&&getY()<300)
            {
               setLocation(getX()-20,getY()+10);
               turn(-10);
            }
            if(getY()>300 && getY()<471)
            {
               setLocation(getX()+20,getY()-10);
               turn(10);
            }
            if(getY()>471)
             {
               setLocation(getX()+10,getY()-10);
               turn(10);
            }
            
           

        }
    }
    
       public void detectOutWalls3()
    {
        //World world=getWorld();
   //     if(world instanceof Fortaleza3)
     //   {
        Wall3 wall3=(Wall3)getOneIntersectingObject(Wall3.class);
      //  Wall4 wall4=(Wall4)getOneIntersectingObject(Wall4.class);
        if(wall3!=null )
        {
           
          if(getX()<197&&getY()>190) // acostados a a la izquierda
          {
            //  setLocation(getX(),getY()+5);
              turn(120);
              move(5);
            }
            
            if(getY()>445 && getX()>180) // acostados hasta abajo a la derecha
            {
                turn(-120);
                move(5);
            }
            
            if(getX()>258&&getX()<704&&getY()<428&&getY()>145) //acostadas en la 2da linea
            {
                turn(120);
                move(5);
            }
            
            if(getY()<147&&getX()<255)//acotado esquina izquierda
            {
                turn(-120);
                move(5);
            }
          

       // }
    }
}

public void detectOutWalls4()
{
      Wall4 wall4=(Wall4)getOneIntersectingObject(Wall4.class);
      //  Wall4 wall4=(Wall4)getOneIntersectingObject(Wall4.class);
        if(wall4!=null )
        {
            if(getX()>240&&getX()<380)
            {
                 turn(120);
                move(5);
            }
            if(getX()>440)
            {
                turn(-120);
              move(5);
        }
    }  
}
    
    
    

    public void attack()
    {
        if(grass.getDestroy()==false)

        {
            turnTowards(grass.getX(),grass.getY());
            move(1);
            //if(grass.getDestroy()==false)
            destroy();
        }
        else
        {
            seleccionaAtaque();
            //grass.setImage("beeper.png");
            //getWorld().removeObject(grass);
        }     
    }

    public void seleccionaAtaque()
    {
        World world=getWorld();
        if(world instanceof Fortaleza || world instanceof Fortaleza2)
        {
            if(randomNumber==0)
            {
                attackActivador();
                destroyActivador();
            }
            if(randomNumber==1)
            {
                attackPuerta();
                destroyPuerta();
            }
            if(randomNumber==2)
            {
                getWorld().removeObject(this);
            }
            
        }
        if(world instanceof Fortaleza3)
        {
            if(randomNumber==0)
            {
                attackActivador();
                destroyActivador();
            }
            if(randomNumber==1)
            {
                attackPuerta();
                destroyPuerta();
            }
            if(randomNumber==2)
            {
                attackHeroe();
                destroyHero();
            }
        }
    }

    public void attackActivador()
    {
        World world=getWorld();
        Activador act;
        if(world instanceof  Fortaleza)
        {
            //    act=(Fortaleza).getActivador();
            //  if(world instanceof Fortaleza2)
            act=((Fortaleza)world).getActivador();

            turnTowards(act.getX(),act.getY());
            move(1);
        }
        if(world instanceof Fortaleza2)
        {
            //    act=(Fortaleza).getActivador();
            //  if(world instanceof Fortaleza2)
            act=((Fortaleza2)world).getActivador();
            //        if(isTouching(Wall3.class))
            //      {
            //      setLocation(getX()+15,getY());
            //    }
            turnTowards(act.getX(),act.getY());
            move(1);
        }
         if(world instanceof Fortaleza3)
        {
            //    act=(Fortaleza).getActivador();
            //  if(world instanceof Fortaleza2)
            act=((Fortaleza3)world).getActivador();
            //        if(isTouching(Wall3.class))
            //      {
            //      setLocation(getX()+15,getY());
            //    }
            turnTowards(act.getX(),act.getY());
            move(1);
        }
    }

    public void attackPuerta()
    {
        World world=getWorld();
        Puerta puerta;
        PuertaV puertaV;

        if(world instanceof  Fortaleza)
        {
            puerta=((Fortaleza)world).getPuerta();
            turnTowards(puerta.getX(),puerta.getY());
            move(1);
        }
        if(world instanceof  Fortaleza2)
        {
            puerta=((Fortaleza2)world).getPuerta();
            turnTowards(puerta.getX(),puerta.getY());
            move(1);    
        }   
        if(world instanceof  Fortaleza3)
        {
            puertaV=((Fortaleza3)world).getPuerta();
            turnTowards(puertaV.getX(),puertaV.getY());
            move(1);    
        }    
        
    }

    public void attackHeroe()
    {
        World world=getWorld();
        if(world instanceof  Fortaleza3)
        {
            Heroe heroe=((Fortaleza3)getWorld()).getHeroe();

            turnTowards(heroe.getX(),heroe.getY());
            move(1);
        }

    }

    /*
     * Monster attacks the grass
     */
    /* public void attackGrass()
    {   
    Grass grass=((Fortaleza)getWorld()).getGrass(); 
    if(grass.getDestroy()==false)
    {
    turnTowards(grass.getX(),grass.getY());
    move(1);
    }
    else
    {
    getWorld().removeObject(grass);
    attackHeroe();
    }*/

    //}  

    /*
    public void mueve(int direccion)
    {
    move(direccion);
    ();
    }*/

    /* 
     * Monter attacks the Hero
     */ 

    /*  public void attackHeroe()
    {
    Heroe heroe=((Fortaleza)getWorld()).getHeroe();

    turnTowards(heroe.getX(),heroe.getY());
    move(1);

    }*/

    /*public void attackObj()
    {
    Activador obj=((Fortaleza)getWorld()).getObj();

    turnTowards(obj.getX(),obj.getY());
    move(1);

    }*/

    /*
     * Destroy the grass
     */

    public void detectOutsideWalls()
    {
        World world=getWorld();
        if(world instanceof Fortaleza)
        {
            detectOutWalls();
        }
        if(world instanceof Fortaleza2)
        {
            detectWall3();
            detectWall4();
        }
        if(world instanceof Fortaleza3)
        {
           detectOutWalls3();
           detectOutWalls4();
        }
    }

    public void detectWall3()
    {

        Wall3 wall=(Wall3)getOneIntersectingObject(Wall3.class);
    
        if(wall!=null)
        {
            if( getY()>360)
            {
                setLocation(getX()-5,getY());
                turn(-5);
            }

            //     }
        }
    }

    public void detectWall4()
    {
        //   World world=getWorld();
        Wall4 wall=(Wall4)getOneIntersectingObject(Wall4.class);
        //    if(world instanceof Fortaleza2)
        // {
        if(wall!=null)
        {
            if( getY()>246 && getY()<363 && getX()<400)
            {
                setLocation(getX()+20,getY()-5);
                turn(+5);
            }
            if(getY()>363)
            {
                setLocation(getX(),getY()-5);
                turn(-5);
            }

            //      }
        }
    }

    public void destroy()
    {
        int band=0;
        if(isTouching(Grass.class)&&grass.getDestroy()==false)
        {
            Actor grass = getOneIntersectingObject( Grass.class );
            //Greenfoot.delay(50); 

            ((Grass)grass).decreaseResistance();
            this.move(-20);

        }

    }
}
